package appIdeasScrumer.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import appIdeasScrumer.excepcion.DAOExcepcion;
import appIdeasScrumer.modelo.CentroFormacion;
import appIdeasScrumer.negocio.GestionTipoCentro;
import appIdeasScrumer.util.ConexionBD;

public class CentroFormacionDAO extends BaseDAO {


	public Collection<CentroFormacion> buscarPorNombre(String nombre) throws DAOExcepcion {
		String query = "select t1.cod_centro, t1.des_nombre, t1.des_url, t1.img_logo, t1.aud_estadologico, t1.cod_tipocentro, t2.nom_tipocentro  " +
				" from tc_centroformacion as t1 inner join tc_tipocentro as t2 on t1.cod_tipocentro=t2.cod_tipocentro where t1.des_nombre like ?" +
				" order by t1.des_nombre ";
		Collection<CentroFormacion> result = new ArrayList<CentroFormacion>();
		Connection cnx = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			cnx = ConexionBD.obtenerConexion();
			stmt = cnx.prepareStatement(query);
			stmt.setString(1, "%" + nombre + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				CentroFormacion cf = new CentroFormacion();
				GestionTipoCentro gtc = new GestionTipoCentro();
				cf.setCodCentro(rs.getInt("cod_centro"));
				cf.setNombre(rs.getString("des_nombre"));
				cf.setUrl(rs.getString("des_url"));
				cf.setImgLogo(rs.getString("img_logo"));
				cf.setEstado(rs.getString("aud_estadologico"));
				cf.setTipoCentro(gtc.obtener(rs.getInt("cod_tipocentro")));
				cf.setNomtc(rs.getString("nom_tipocentro"));
				result.add(cf);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(cnx);
		}
		//System.out.println(lista.size());
		return result;
	}

	public CentroFormacion agregar(CentroFormacion cf) throws DAOExcepcion {
		String query = "insert into tc_centroformacion(des_nombre, des_url, img_logo, cod_tipocentro, aud_estadologico) " +
				"values (?,?,?,?,1)";
		Connection cnx = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			cnx = ConexionBD.obtenerConexion();
			stmt = cnx.prepareStatement(query);
			stmt.setString(1, cf.getNombre());
			stmt.setString(2, cf.getUrl());
			stmt.setString(3, cf.getImgLogo());
			stmt.setInt(4, cf.getTipoCentro().getCodTipoCentro());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = cnx.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			cf.setCodCentro(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(cnx);
		}
		return cf;
	}

	public CentroFormacion actualizar(CentroFormacion cf) throws DAOExcepcion {
		String query = "update tc_centroformacion set des_nombre=?,des_url=?,img_logo=?,aud_estadologico=?,cod_tipocentro=? " +
				"where cod_centro=?";
		Connection cnx = null;
		PreparedStatement stmt = null;
		try {
			cnx = ConexionBD.obtenerConexion();
			stmt = cnx.prepareStatement(query);
			stmt.setString(1, cf.getNombre());
			stmt.setString(2, cf.getUrl());
			stmt.setString(3, cf.getImgLogo());
			stmt.setString(4, cf.getEstado());
			stmt.setInt(5, cf.getTipoCentro().getCodTipoCentro());
			stmt.setInt(6, cf.getCodCentro());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(cnx);
		}
		return cf;
	}

	public CentroFormacion obtener(int cod) throws DAOExcepcion {
		CentroFormacion cf = new CentroFormacion();
		Connection cnx = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select cod_centro, des_nombre, des_url, img_logo, cod_tipocentro from tc_centroformacion where cod_centro=?";
			cnx = ConexionBD.obtenerConexion();
			stmt = cnx.prepareStatement(query);
			stmt.setInt(1, cod);
			rs = stmt.executeQuery();
			GestionTipoCentro gtc = new GestionTipoCentro();
			if (rs.next()) {
				cf.setCodCentro(rs.getInt(1));
				cf.setNombre(rs.getString(2));
				cf.setUrl(rs.getString(3));
				cf.setImgLogo(rs.getString(4));
				cf.setTipoCentro(gtc.obtener(rs.getInt(5)));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(cnx);
		}
		return cf;
	}

	public Collection<CentroFormacion> listar() throws DAOExcepcion {
		Collection<CentroFormacion> ccf = new ArrayList<CentroFormacion>();
		Connection cnx = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			cnx = ConexionBD.obtenerConexion();
			String query = "select t1.cod_centro, t1.des_nombre, t1.des_url, t1.img_logo, t1.aud_estadologico, nom_tipocentro "+ 
"from tc_centroformacion as t1 inner join tc_tipocentro as t2 on t1.cod_tipocentro=t2.cod_tipocentro order by des_nombre";
			stmt = cnx.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				//GestionTipoCentro gtc = new GestionTipoCentro();
				CentroFormacion cf = new CentroFormacion();
				cf.setCodCentro(rs.getInt("cod_centro"));
				cf.setNombre(rs.getString("des_nombre"));
				cf.setUrl(rs.getString("des_url"));
				cf.setImgLogo(rs.getString("img_logo"));
				cf.setEstado(rs.getString("aud_estadologico"));
				cf.setNomtc(rs.getString("nom_tipocentro"));
				ccf.add(cf);
			}
	
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(cnx);
		}
		return ccf;
	}

}
